﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Com.AlbLab.GEP.Domain.Entities;
using common.pages;

namespace Com.AlbLab.CR.Web.controls
{
    public partial class ResponseD01 : System.Web.UI.UserControl, IResponse
    {
        public event SaveEventHandler Save;
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        public void Initialize(PraticaBase p)
        {
            GEP_TESTATA t = p.GEP_testata;
            hidPrtId.Value = t.Id_tes_cod_pratica.ToString().Trim();
            hidTipo.Value = t.Tes_Cod_Servizio.Trim();
            if (t.Gep_risposta.Response == null)
            {
                esito.SelectedValue = "1";
                cod_servizio.Text = t.Tes_Cod_Servizio.Trim();
                piva_utente.Text = t.Tes_Piva_Utente.Trim();
                piva_distributore.Text = t.Tes_Piva_Distributore.Trim();
                cod_prat_utente.Text = t.Id_tes_cod_pratica.ToString();
                cod_prat_distr.Text = t.Tes_Cod_Prat_Utente.Trim();
                cod_pod.Text = t.Tes_Pod.Trim();

                misuratore_elettronico.SelectedValue = t.Tes_DBA_Mis_Eleco.ToUpper().Trim();
                matr_mis_attiva.Text = t.Tes_DBA_Matr_Att.Trim();
                matr_mis_reattiva.Text = t.Tes_DBA_Matr_Rea.Trim();
                matr_mis_potenza.Text = t.Tes_DBA_Matr_Pot.Trim();

                GEP_RISPOSTA res = new GEP_RISPOSTA();
                res.Resp_Id = Convert.ToDecimal(hidPrtId.Value);
                res.Tipo_servizio = hidTipo.Value.Trim();
                res.Response = buildRecord();

                if (Save != null)
                    Save(this, res,true);
            } 
        }


        public System.Xml.XmlDocument buildRecord()
        {
            System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
            doc.LoadXml("<Response></Response>");

            foreach (Control c in this.Controls)
            {
                if (c.GetType() == typeof(TextBox))
                {
                    TextBox t = (TextBox)c;
                    System.Xml.XmlElement el = doc.CreateElement(t.ID);
                    el.InnerXml = t.Text;
                    doc.DocumentElement.AppendChild(el);
                }
                else if (c.GetType() == typeof(DropDownList))
                {
                    DropDownList t = (DropDownList)c;
                    System.Xml.XmlElement el = doc.CreateElement(t.ID);
                    el.InnerXml = t.SelectedValue;
                    doc.DocumentElement.AppendChild(el);
                }
            }
            return doc;
        }

        public void setdRecord(System.Xml.XmlDocument doc,bool lReadOnly)
        {

            foreach (System.Xml.XmlElement el in doc.DocumentElement.ChildNodes)
            {
                Control cc = this.FindControl(el.Name);
                // Blocca o meno il campo dalla scrittura
                if (cc.GetType() == typeof(TextBox))
                    ((TextBox)cc).ReadOnly = lReadOnly;
                else if (cc.GetType() == typeof(DropDownList))
                    ((DropDownList)cc).Enabled = !lReadOnly;

                // Riempe il campo se valorizzato.
                if (!string.IsNullOrEmpty(el.InnerXml))
                {
                    if (cc.GetType() == typeof(TextBox))
                        ((TextBox)cc).Text = el.InnerXml;
                    else if (cc.GetType() == typeof(DropDownList))
                        ((DropDownList)cc).SelectedValue = el.InnerXml;
                }
            }
        }

        public void btnSave_OnClick(object sender, EventArgs e)
        {
            if (!isValid())
                return;

            GEP_RISPOSTA res = new GEP_RISPOSTA();
            res.Resp_Id = Convert.ToDecimal(hidPrtId.Value);
            res.Tipo_servizio = hidTipo.Value;
            res.Response = buildRecord();
            if (Save != null)
                Save(this,res,false);
        }

        public bool isValid()
        { 
            bool valid=true;

            if(esito.SelectedValue.Equals("1"))
                if (string.IsNullOrEmpty(data_disattivazione.Text))
                {
                    ((BasePage)this.Page).info.AddMessage("La data di disattivazione è obbligatoria!!", GEP.Domain.LivelloMessaggio.WARNING);
                    valid = false;
                }

            if (valid) return true;
            else return false;  
        }
    }
}